/*
抽象类用abstract关键字修饰
抽象类其实就是将通用性的东西抽离出来，变成一个抽象类
抽象类可以定义属性、方法和抽象方法
抽象类只能被继承，不能被实例化
抽象类可以有构造器
*/
abstract class Shape {
    // 抽象方法
    abstract getArea(): number
}

class Rectangle extends Shape {
    constructor(public width: number, public height: number) {
        super()
    }

    getArea(): number {
        return this.width + this.height
    }
}

const r: Rectangle = new Rectangle(10, 20)
console.log(r.height, r.width)
